package com.example.controller;

import com.example.pojo.dto.UserInsertDTO;
import com.example.pojo.dto.UserPageQueryDTO;
import com.example.pojo.dto.UserUpdateDTO;
import com.example.pojo.entity.User;
import com.example.pojo.entity.result.PageResult;
import com.example.pojo.entity.result.Result;
import com.example.pojo.vo.UserPageVO;
import com.example.pojo.vo.UserVO;
import com.example.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/admin/user")
@RequiredArgsConstructor
@Slf4j
@Api("用户相关接口")
public class UserController {
    private final UserService userService;

    /**
     * 新增用户
     *
     * @param userInsertDTO
     * @return
     */
    @PostMapping
    @ApiOperation("新增用户")
    public Result<User> insertUser(@RequestBody UserInsertDTO userInsertDTO) {
        log.info("新增用户：{}", userInsertDTO);
        User user = userService.insertUser(userInsertDTO);
        log.info("新增职工成功");
        return Result.success(user);
    }

    /**
     * 删除用户
     * @param id
     * @return
     */
    @DeleteMapping
    @ApiOperation("删除用户")
    public Result deleteUser(@RequestParam Long id) {
        log.info("删除用户：{}", id);
        userService.deleteUser(id);
        log.info("删除用户成功");
        return Result.success();
    }

    /**
     * 修改用户信息
     *
     * @param userUpdateDTO
     * @return
     */
    @PutMapping
    @ApiOperation("修改用户信息")
    public Result updateUser(@RequestBody UserUpdateDTO userUpdateDTO) {
        log.info("修改用户信息：{}", userUpdateDTO);
        userService.updateUser(userUpdateDTO);
        log.info("修改成功");
        return Result.success();
    }

    /**
     * 查询用户信息
     *
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    @ApiOperation("查询用户信息")
    public Result<UserVO> getUserById(@PathVariable Long id) {
        log.info("查询用户信息：{}", id);
        UserVO userVO = userService.getUserById(id);
        log.info("查询成功");
        return Result.success(userVO);
    }

    /**
     * 分页查询用户列表
     * @param userPageQueryDTO
     * @return
     */
    @GetMapping("/page")
    @ApiOperation("用户列表分页查询")
    public Result<PageResult<UserPageVO>> pageUser(UserPageQueryDTO userPageQueryDTO) {
        log.info("分页查询用户列表：{}", userPageQueryDTO);
        PageResult<UserPageVO> pageResult = userService.pageUser(userPageQueryDTO);
        log.info("查询成功");
        return Result.success(pageResult);
    }
}